package com.purdue.edu.psychotron.client.service;

import java.util.ArrayList;

import com.google.gwt.user.client.rpc.AsyncCallback;
import com.purdue.edu.psychotron.shared.Pair;
import com.purdue.edu.psychotron.shared.Quad;
import com.purdue.edu.psychotron.shared.UUID;

public interface UserServiceAsync {
	void register(String firstName, String lastName, String login, String password, AsyncCallback<String> callback);

	void logIn(String login, String password, AsyncCallback<String> callback);

	void logOut(String login, AsyncCallback<String> callback);

	void unsubscribe(String login, AsyncCallback<String> callback);

	void getContactPairListByUerId(String userId, AsyncCallback<ArrayList<Pair<String, String>>> callback);

	void getBlockedContactPairListByUerId(String userId, AsyncCallback<ArrayList<Pair<String, String>>> callback);

	void addNewContactByUserId(String baseUserId, String targetUserLogin, AsyncCallback<String> callback);

	void sendMessageToBuffer(String userAId, String userBId, String message, AsyncCallback<Void> callback);

	void requestMessage(String userAId, String userBId, AsyncCallback<String> callback);

	void timmer(Integer waitForNSeconds, AsyncCallback<Void> callback);

	void getUserLoginByUserId(String UserId, AsyncCallback<String> callback);

	void getUserFullNameByUserId(String UserId, AsyncCallback<String> callback);

	void initializeCloudMessengerForUserId(String userId, AsyncCallback<Void> callback);

	void disengageCloudMessengerForUserId(String userId, String targetUserId, AsyncCallback<Void> callback);

	void removeContactByUserId(String requesterId, String targetUserId, AsyncCallback<Void> callback);

	void getContactListByUserId(String userId, AsyncCallback<ArrayList<String>> callback);

	void getBlockedContactListByUserId(String userId, AsyncCallback<ArrayList<String>> callback);

	void blockContactForRequesterIdByTargetId(String requesterId, String targetId, AsyncCallback<Void> callback);

	void getContactNameListByUserId(String userId, AsyncCallback<ArrayList<String>> callback);

	void getBlockedContactNameListByUserId(String userId, AsyncCallback<ArrayList<String>> callback);

	void getContactInfoBundleListByUserId(String userId, AsyncCallback<ArrayList<Quad<String, String, String, String>>> callback);
	
	void getBlockedContactInfoBundleListByUserId(String userId, AsyncCallback<ArrayList<Quad<String, String, String, String>>> callback);
	
	void getPendingContactInfoBundleListByUserId(String userId, AsyncCallback<ArrayList<Quad<String, String, String, String>>> callback);
	
	void getChattingHistoryByIds(String userAId, String userBId, AsyncCallback<String> callback);

	void clearChattingHistoryByIds(String userAId, String userBId, AsyncCallback<Void> callback);
	
	void inviteContactByTargetLogin(String userId, String targetLogin, AsyncCallback<Void> callback);
	
	void acceptContactByTargetLogin(String userId, String targetId, AsyncCallback<Void> callback);
	
	void rejectContactByTargetLogin(String userId, String targetId, AsyncCallback<Void> callback);
	
}